package com.cskaoyan.javase.oop2._1extends._0introduction;

import javax.swing.*;

/**
 * 根据我们之前学过的知识，完成如下练习：
 * 分别定义一个表示人和学生的类：
 * 人类：有姓名属性，以及吃饭这个行为
 * 教师类：有姓名，教师号两个属性，同时有吃饭，教学两种行为
 * 学生类：有姓名，学号两个属性，同时有吃饭，学习两种行为
 * 很明显，像成员变量name，方法eat等都是被重复定义的成员。
 * 既然有重复，那就想复用它们，现在的需求是：复用类的成员。怎么做呢？
 * Java中对代码的直接复用依赖于某一个方法，而想要复用类的成员，就必须使用Java中的继承语法。
 *
 * 继承的语法：
 * Java在定义一个类时，可以显式地，直接让它继承另一个类，这就是Java的继承机制
 * 其语法是：
 * [访问权限修饰符] class 类名 extends 被继承的类/已经存在的某个类{}
 * 解释：
 *      1."extends"是一个关键字,它表示继承.
 *      2.被继承的类/已经存在的某个类,在继承当中,称之为"父类,超类(superclass)"
 *      3.继承父类的,就是子类(subclass)
 *      4.子类通过继承父类,会得到父类的所有成员
 *          注: 这里指的是符类的成员变量/方法,不包括静态成员,也不包括构造器
 *          继承的本质是对父类成员的复用
 *      5.子类在继承父类成员的基础上,还可以自己新增一些自定义成员
 *      这其实是,子类在父类的基础上扩展了父类
 *      所以继承在Java中使用关键字"extends"
 *      子类相比于父类"青出于蓝而胜于蓝"
 *      子类从功能上来说,至少不会比父类弱
 *      往往比父类强
 *
 *
 * @since 17:11
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        Student s = new Student();
        t.eat();
        System.out.println(s.name);
    }
}

// 父类
class Person {
    String name;

    public void eat() {
        System.out.println("吃饭是最重要的~");
    }
}

class Teacher extends Person {
    int staffId;

    public void teach() {
        System.out.println("上课是为了赚钱吃饭~");
    }
}

class Student extends Person{
    int stuId;
    public void study() {
        System.out.println("学习是为了赚钱吃饭~");
    }
}